package cn.swing.ushare.user.webapi.mapper;


import cn.swing.ushare.pojo.dto.*;
import cn.swing.ushare.pojo.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 处理“用户”数据的持久层接口
 */
@Repository
public interface UserMapper {


    /**
     * 根据用户id更新用户的启用状态
     */
    int updateUserEnableById(@Param("id") Integer id, @Param("isEnable") Integer isEnable);


    /**
     * 根据“用户”id查询“用户”的详细信息
     *
     * @param id “用户”id
     * @return “用户”的详细信息
     */
    UserDetailsVO getUserDetailsById(Integer id);

    /**
     * 根据用户id返回用户详细信息到前台
     *
     * @param id
     * @return
     */
    UserCenterDetailsVO getUserCenterDetails(Integer id);


    /****************************************ljk改**********************************/


    /**
     * 分页查询
     *
     * @param nickname
     * @param page
     * @return
     */
    List<UserListVO> userList(@Param("nickname") String nickname,
                              @Param("page") Integer page);


    /**
     * 分页查询总页数
     *
     * @return
     */
    Integer userCount(String nickname);

    /**
     * 获取用户个人信息
     *
     * @return 头像、username,密码
     */
    PersonalSimpleVO getPersonalSimple(String username);

    /**
     * 根据用户名改密码
     *
     * @return 受印象行数
     */
    Integer updatePassByUsername(UserChangePasswordDTO userChangePasswordDTO);

    /****************************************ljk改**********************************/


    /**
     * 根据用户id以及用户当前身份更新用户身份
     * 此处user_role表中1表示管理员 2表示用户
     *
     * @param
     * @return 返回受影响的行数
     */
    int updateUserRole(@Param("id") Integer id, @Param("roleName") Integer roleName);


    /**
     * 返回角色表相关信息
     *
     * @return
     */
    List<RoleListVO> roleList();


    int insertRole(@Param("roleName") Integer roleName);


    /**
     * 根据用户ID查询用户中心头图的信息
     *
     * @param userId
     * @return
     */
    UserCenterHeaderVO getUserCenterHeaderById(Integer userId);

    /**
     * 获取用户的类别信息
     *
     * @param id
     * @return
     */
    List<CategorySimpleVO> getUserCenterCategory(Integer id);

    /**
     * 获取全部类别
     *
     * @param id
     * @return
     */
    List<CategorySimpleVO> getAllCategory(Integer id);

    /**
     * 根据id获取修改头像界面的当前头像
     *
     * @param id
     * @return
     */
    /**
     * 【修改头像】页面，获取用户当前头像
     *
     * @param id
     * @return
     */
    String getCurrentAvatar(Integer id);


    /**
     * 后端界面增加管理员
     *
     * @param roleName
     * @return
     */
    int insertRole(@Param("roleName") String roleName);


    /**
     * 各个界面操作日志处理
     *
     * @param systemModule    操作模块
     * @param operationType   操作类型 删除 插入 更新...
     * @param operator        操作者
     * @param operationDetail 操作细节
     */
    void insertOperationLog(@Param("systemModule") String systemModule,
                            @Param("operationType") String operationType,
                            @Param("operator") String operator,
                            @Param("operationDetail") String operationDetail);


    /**
     * 通过ID获取文章详情页面的用户信息
     *
     * @param id
     * @return
     */
    UserCenterHeaderVO getArticleDetailsUserInfoById(Integer id);

    /**
     * 获取全部关注
     *
     * @param id
     * @return
     */
    List<UserSimpleVO> getAllFollows(Integer id);

    /**
     * 获取关注状态
     *
     * @param id
     * @return
     */
    List<Integer> isFollow(Integer id);

    /**
     * 添加关注
     *
     * @param id
     * @return
     */
    int insertFollow(Integer id, Integer userId);

    /**
     * 取消关注
     *
     * @param id
     * @return
     */
    int deleteFollow(Integer id, Integer userId);

    /**
     * 获取全部粉丝
     *
     * @param id
     * @return
     */
    List<UserSimpleVO> getAllFans(Integer id);


    /**
     * 根据用户ID删除其全部分类
     *
     * @param userId
     */
    int deleteUserCenterCategoryById(Integer userId);

    /**
     * 更新用户中心类别
     *
     * @param userCenterCategories
     * @return
     */
    int insertUserCenterCategories(List<UserCenterCategoryDTO> userCenterCategories);

    /**
     * 更新用户的信息
     *
     * @param userCenterDetails
     * @return
     */
    int updateUserCenterDetails(UserCenterDetailsDTO userCenterDetails);


    /**
     * 根据id删除角色管理信息
     */
    void deleteRoleById(Integer id);


    /**
     * 根据id返回
     *
     * @param
     */
    List<PermissionListVO> getPermissions();


    /**
     * 根据id获取当前用户的id值
     *
     * @return
     */
    List<SelectPermissionVO> getPermissionById(Integer roleId);

    /**
     * 更改角色可以使用的操作
     *
     * @param changeRoleOperations
     * @return
     */
    int changeRoleOperation(List<ChangeRoleOperationDTO> changeRoleOperations);


    /**
     * 根据id删除角色操作
     *
     * @param roleId
     * @return
     */
    int deleteRoleOperationById(Integer roleId);


    /**
     * 删除用户—操作表空字段
     *
     * @return
     */
    int deleteNull();


    /**
     * 插入注册用户信息
     *
     * @param
     * @return
     */
    int insertRegister(UserRegisterDTO userRegisterDTO);


    /**
     * 获取user表中最大的id值
     *
     * @return
     */
    int selectMaxId();

    /**
     * 根据昵称检验注册时昵称重复情况
     *
     * @param nickname
     * @return
     */
    int selectNickname(String nickname);

    /**
     * 更换用户头像
     *
     * @param userId 用户id
     * @param imgUrl 用户的新头像
     * @return 受影响的行数
     */
    int updateUserAvatar(Integer userId, String imgUrl);


    /**
     * 根据昵称获取用户uuId
     *
     * @param nickname
     */
    String selectUsernameByNickname(String nickname);

    /**
     * 增加用户表中用户的关注量
     *
     * @param userId
     * @return
     */
    Integer addUserFollowers(Integer userId);

    /**
     * 增加用户表中用户的关注量
     *
     * @param userId
     * @return
     */
    Integer subUserFollowers(Integer userId);

    /**
     * 增加用户表中用户的关注量
     *
     * @param userId
     * @return
     */
    Integer addUserFans(Integer userId);

    /**
     * 减少用户表中用户的粉丝量
     *
     * @param userId
     * @return
     */
    Integer subUserFans(Integer userId);


    /**
     * 更新用户上次登录时间
     *
     * @param username
     */
    void updateLastLoginTime(String username);

    /**
     * 根据用户注册时的id分配默认身份
     *
     * @param userId
     * @param roleId
     */
    void insertUserRole(Integer userId, Integer roleId);
}
